package page.ineffable.photostorage.mapper;

import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import page.ineffable.photostorage.pojo.Photo;

import java.util.List;

/**
 * 图片mybatis mapper
 *
 * @author lqs2
 * @date 2018/10/29, Mon
 */
@Mapper
@Component
public interface ImageMapper {


    /**
     * 上传图片后插入一条记录
     *
     * @param photo 图片pojo
     * @return 1：插入成功，0：插入失败
     **/
    @Insert("insert into image values(#{photo.id}, #{photo.name}, #{photo.author}, #{photo.suffix}, #{photo.storagePath}, #{photo.hasWaterMark}, #{photo.markStoragePath}, #{photo.size}, #{photo.width}, #{photo.height}, #{photo.lon}, #{photo.lat}, null, null)")
    int insertRecord(@Param("photo") Photo photo);

    /**
     * 查询用户的所有照片信息
     *
     * @param username 用户名
     * @return 照片列表
     **/
    @Select("select * from image where author = #{author} order by uploadDate desc")
    List<Photo> getPhotosByUser(@Param("author") String username);

    /**
     * 删除指定的照片
     *
     * @param id       图像id
     * @param username 图像作者
     * @return 0：删除失败，否则删除成功
     **/
    @Delete("delete from image where id = #{id} and author = #{author}")
    int removePhotoById(@Param("id") String id, @Param("author") String username);

    /**
     * 根据图像的id查找指定的图像
     *
     * @param id 图像id
     * @return 图像的信息
     **/
    @Select("select * from image where id  = #{id}")
    Photo getPhotosById(@Param("id") String id);

    /**
     * 根据图像的id修改图片是否有水印的状态
     *
     * @param id    图像的id
     * @param state 1:有水印，0：无水印
     * @return 状态是否修改成功
     **/
    @Update("update image set hasWaterMark = #{state} where id = #{id}")
    int modPhotoWaterMarkState(@Param("id") String id, @Param("state") int state);

    /**
     * 图像增加水印后修改图像的信息
     *
     * @param id    图像id
     * @param photo 图像信息
     * @return 是否修改成功
     **/
    @Update("update image set hasWaterMark = 1 , markStoragePath = #{photo.markStoragePath} where id = #{id}")
    int modPhotoInfoAfterAddMark(@Param("id") String id, @Param("photo") Photo photo);
}
